// app/middleware/redis_health.js
'use strict';

module.exports = (options, app) => {
  return async function redisHealth(ctx, next) {
    const { logger } = ctx;
    
    // 健康检查间隔（默认30秒）
    const checkInterval = options.interval || 30000;
    
    // 创建健康检查定时器
    const timer = setInterval(async () => {
      try {
        await ctx.redis.check();
        logger.info('[Redis健康检查] 连接状态正常');
      } catch (err) {
        logger.error('[Redis健康检查] 连接异常', err);
        // 触发熔断机制
        ctx.app.circuitBreaker.trigger('redis');
      }
    }, checkInterval);

    // 保存定时器引用以便清除
    ctx.app.redisHealthTimer = timer;
    
    try {
      await next();
    } finally {
      clearInterval(timer);
    }
  };
};